<?php

// 定义发送短信接口
interface Message
{
    public function send(string $message);
}
// 实现短信发送接口 - 阿里云
class AliYunMessage implements Message
{
    public function send(string $message)
    {
        // 调用接口，发送短信
        // xxxxxx
        return '阿里云短信发送成功！短信内容：' . $message;
    }
}
// 实现短信发送接口 - 百度云
class BaiduYunMessage implements Message
{
    public function send(string $message)
    {
        // 调用接口，发送短信
        // xxxxxx
        return '百度SMS短信发送成功！短信内容：' . $message;
    }
}
// 实现短信发送接口 - 极光
class JiguangMessage implements Message
{
    public function send(string $message)
    {
        // 调用接口，发送短信
        // xxxxxx
        return '极光短信发送成功！短信内容：' . $message;
    }
}


// 抽象消息工厂
abstract class MessageFactory
{
    // 抽象工厂方法 - 受保护的类型
    abstract protected function factoryMethod();
    // 抽象操作方法
    public function getMessage()
    {
        return $this->factoryMethod();
    }
}
// 继承消息工厂实现类 - 阿里云工厂
class AliYunFactory extends MessageFactory
{
    // 实现工厂方法 - 返回阿里云短信接口
    protected function factoryMethod()
    {
        return new AliYunMessage();
    }
}
// 继承消息工厂实现类 - 百度云工厂
class BaiduYunFactory extends MessageFactory
{
    // 实现工厂方法 - 返回百度云短信接口
    protected function factoryMethod()
    {
        return new BaiduYunMessage();
    }
}
// 继承消息工厂实现类 - 极光工厂
class JiguangFactory extends MessageFactory
{
    // 实现工厂方法 - 返回极光短信接口
    protected function factoryMethod()
    {
        return new JiguangMessage();
    }
}

// 当前业务需求：阿里云
$Alifactory = new AliYunFactory();
// 当前业务需求：百度云
$Baidufactory = new BaiduYunFactory();
// 当前业务需求：极光
$Jiguangfactory = new JiguangFactory();

$ali_message = $Alifactory->getMessage();
$baidu_message = $Baidufactory->getMessage();
$jiguang_message = $Jiguangfactory->getMessage();
echo $ali_message->send('您有新的短消息，请查收');
echo '<br/>';
echo $baidu_message->send('您有新的短消息，请查收');
echo '<br/>';
echo $jiguang_message->send('您有新的短消息，请查收');